﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ClientTest
{
    class Program
    {
        static void Main(string[] args)
        {
            //// เปิด session เพื่อเตรียมทำงานกับ Database
            NHibernate.ISession session = Vol1.Sample01.MyDAL.NHibernateHelper.GetCurrentSession();
            // ใช้งาน transaction 
            NHibernate.ITransaction tx = session.BeginTransaction();

            #region Save
            // ทำการสร้าง customer instance
            Vol1.Sample01.MyDAL.DomainEntities.Customer cust1 = new Vol1.Sample01.MyDAL.DomainEntities.Customer();
            cust1.FirstName = "Somchai";
            cust1.LastName = "Sakleoi";
            cust1.Sex = Vol1.Sample01.MyDAL.DomainEntities.Sex.Male;
            cust1.Age = 25;

            // ทำการสร้าง address ของ customer
            Vol1.Sample01.MyDAL.DomainEntities.Address addr = new Vol1.Sample01.MyDAL.DomainEntities.Address();
            addr.Road = "Ratchada";
            addr.City = "Huaykwang";
            addr.Country = "Thailand";
            addr.PostCode = "10310";

            // เพิ่ม address ให้ customer
            cust1.Addresses.Add(addr);


            // สั่ง Save ลง Database
            session.Save(cust1);
            #endregion

            #region Search
            // ทำการค้นหา customer object ใน table ด้วยเงื่อนไข firstname like 'Som%'
            var res = session.CreateCriteria(typeof(Vol1.Sample01.MyDAL.DomainEntities.Customer))
                .Add(NHibernate.Criterion.Restrictions.Like("FirstName", "Som%")).List<Vol1.Sample01.MyDAL.DomainEntities.Customer>() ;

            Console.WriteLine(" Search customer by FirstName 'Som%' found {0} object ", res.Count);
            foreach (var customer in res)
            {
                Console.WriteLine("customer firstname={0} lastname={1}  have address {2} ", customer.FirstName,
                                  customer.LastName, customer.Addresses.Count);
            }
            #endregion

            #region Update
            var custx = res[0];
            // แก้ไขค่า firstname ของ custx
            custx.FirstName = "XXX";
            // สั่ง update custx ใน table
            session.Update(custx);
            
            Console.WriteLine("Update customer name from '{0}' to '{1}'",res[0].FirstName, custx.FirstName);
            #endregion

            #region Delete
            //ลบ object custx ออกจาก table
            //session.Delete(custx);
            //Console.WriteLine("Delete customer name '{0}' ", custx.FirstName);
            #endregion

            // สั่งให้ commit transaction
            tx.Commit();
            // สั่งปิด Session
            Vol1.Sample01.MyDAL.NHibernateHelper.CloseSession();

            Console.ReadKey();
        }
    }
}
